package com.itany.cloud.service;

import com.itany.cloud.util.ResponseResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;

/**
 * 创建一个Service接口
 * 该接口直接交给Spring管理
 * 其实现类使用提供者的Handler即可
 * 通过@FeignClient注解配置服务提供者
 * value:指定注册到服务注册中心中的微服务名
 * 指定了微服务之后,相当于访问了指定微服务的服务器地址
 * 即:协议名://域名:端口
 * 在此处即为:http://127.0.0.1:8001
 * <p>
 * fallback属性:当调用的微服务接口出现了故障时
 * 使用当前fallback配置的实现类对当前接口进行处理
 * 即:没有故障,找服务提供者处理
 * 有故障,找fallback处理
 */
@Service
//@FeignClient(value = "cloud-eureka-provider",fallback = UserServiceFallback.class)
@FeignClient(value = "cloud-eureka-zuul")
public interface UserService {

    // 在Service中的每一个方法都需要对应微服务中的某一个Handler进行实现
    // 在当前Service中支持Handler中的所有注解
    // Handler相关注解在当前Service中使用时存在区别
    // 1.对于@RequestMapping注解
    // 在Handler中表示配置当前接口的访问地址
    // 在Service中表示使用当前微服务中的哪一个Handler实现当前接口
    // 2.对于默认行为
    // 在Handler中存在的所有默认行为在当前Service中全部失效

    @GetMapping("/v1/userService/users")
    public ResponseResult findAll();

    @GetMapping("/v1/userService/users/{id}")
    public ResponseResult findById(@PathVariable("id") Integer id);

    @PostMapping("/v1/userService/users")
    public ResponseResult addUser(@RequestParam("username") String username, @RequestParam("password") String password, @RequestParam("phone") String phone, @RequestParam("address") String address);

    @PutMapping("/v1/userService/users")
    public ResponseResult modifyUser(@RequestParam("id") Integer id, @RequestParam("username") String username, @RequestParam("password") String password, @RequestParam("phone") String phone, @RequestParam("address") String address);

    @DeleteMapping("/v1/userService/users/{id}")
    public ResponseResult deleteUser(@PathVariable("id") Integer id);
}
